package control;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.faces.model.SelectItem;

import model.Aluno;
import model.Curso;
import model.Professor;
import model.Turma;
import model.Turno;
import dao.DAOCurso;
import dao.DAOProfessor;
import dao.DAOTurma;

public class PainelTurmaBean {
	private int numero,capacidade,numDel;
	private String turno,professor,curso;
	private Date dataInicio,dataFim;		
	
	public int getNumDel() {
		return numDel;
	}
	public void setNumDel(int numDel) {
		this.numDel = numDel;
	}
	public int getNumero() {
		return numero;
	}
	public void setNumero(int numero) {
		this.numero = numero;
	}
	public int getCapacidade() {
		return capacidade;
	}
	public void setCapacidade(int capacidade) {
		this.capacidade = capacidade;
	}
	public String getTurno() {
		return turno;
	}
	public void setTurno(String turno) {
		this.turno = turno;
	}
	public Date getDataInicio() {
		return dataInicio;
	}
	public void setDataInicio(Date dataInicio) {
		this.dataInicio = dataInicio;
	}
	public Date getDataFim() {
		return dataFim;
	}
	public void setDataFim(Date dataFim) {
		this.dataFim = dataFim;
	}
	public String getProfessor() {
		return professor;
	}
	public void setProfessor(String professor) {
		this.professor = professor;
	}
	public String getCurso() {
		return curso;
	}
	public void setCurso(String curso) {
		this.curso = curso;
	}
	public List<SelectItem> getProfessores() {
		DAOProfessor daoPro = new DAOProfessor();
		List<Professor> lista = daoPro.findAll();
		List <SelectItem> professores = new ArrayList<SelectItem>();
		for (Professor professor : lista) {
			SelectItem s = new SelectItem(professor.getLogin(), professor.getNome());
			professores.add(s);
		}
		return professores;
	}	
	public List<SelectItem> getCursos() {
		DAOCurso daoCu = new DAOCurso();
		List<Curso> lista = daoCu.findAll();
		List<SelectItem> cursos = new ArrayList<SelectItem>();
		for (Curso c : lista) {
			SelectItem s = new SelectItem(c.getNome(), c.getNome());
			cursos.add(s);
		}
		return cursos;
	}
	public List<Turma> getTurmas(){
		DAOTurma daoTur = new DAOTurma();
		List<Turma> lista = daoTur.findAll();
		return lista;
	}
	
	public void cadastrar(){
		DAOProfessor daoProf = new DAOProfessor();
		DAOCurso daoCu = new DAOCurso();
		Professor p = (Professor) daoProf.find(professor);
		Curso c = daoCu.find(curso);
		Turma t;
		DAOTurma daoTu = new DAOTurma();
				
		t = new Turma();
		t.setNumero(numero);
		
		t.setCurso(c);
		t.setProfessor(p);
		t.setCapacidade(capacidade);
		t.setTurno(Turno.valueOf(turno));
		Calendar dataI = Calendar.getInstance();
		Calendar dataF = Calendar.getInstance();
		dataI.setTime(dataInicio);
		dataF.setTime(dataFim);
		t.setDataInicio(dataI);
		t.setDataFim(dataF);
		
		try {
			daoTu.begin();
			daoTu.persist(t);
			daoCu.merge(c);
			daoProf.merge(p);
			daoTu.commit();
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			c.removeTurma(t);
			p.removeTurma(t);
			daoTu.rollback();
			e.getMessage();
		}		
	}
	
	public void deletar(){
		DAOTurma daoturma = new DAOTurma();
		DAOProfessor daoprofessor = new DAOProfessor();
		DAOCurso daocurso = new DAOCurso();
		daoturma.begin();
		Turma t = daoturma.find(numDel);
		List<Aluno> als = t.getAlunos();
		for (Aluno aluno : als) {
			try{
				aluno.removeTurma(t);
			}catch(Exception e){
				e.printStackTrace();
			}
		}
		Professor auxp = t.getProfessor();
		Curso auxc = t.getCurso();
		t.setProfessor(null);
		t.setCurso(null);
		daoprofessor.merge(auxp);
		daocurso.merge(auxc);
		daoturma.merge(t);
		daoturma.remove(t);
		daoturma.commit();
	}
}
